package Foundation;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;

import TechnicalServices.DataConnector;
import TechnicalServices.IMapper;
import DomainPackage.*;
public class YolcuUcusMapper implements IMapper {

	@Override
	public Object get(int ID) {
		YolcuUcus yolcuucus = new YolcuUcus();
		ResultSet rs = DataConnector.getInstance().query("select * from yolcuucus where ucusid = " + ID + "");
		System.out.println("select * from yolcuucus where ucusid = " + ID + "");
		int int3 = 0;
		int int4 = 0;
		int int5 = 0;
		float int6 = 0;
		float int7 = 0;
		if (rs != null){
            
            try {
            		rs.next();
                    int3 = Integer.parseInt(rs.getString(3));
                    int4 = Integer.parseInt(rs.getString(4));
                    int5 = Integer.parseInt(rs.getString(5));
                    int6 = Float.valueOf(rs.getString(6));
                    int7 = Float.valueOf(rs.getString(7));
                    
            		yolcuucus.setUcusID(Integer.parseInt(rs.getString(1)));
            		yolcuucus.setUcusTarihi(new GregorianCalendar(Integer.parseInt(rs.getString(2).split("-")[0]), 
							Integer.parseInt(rs.getString(2).split("-")[1]), 
							Integer.parseInt(rs.getString(2).split("-")[2])));
            		
            		
                   
            } catch (NumberFormatException e) {
                    System.out.println("YolcuUcusMapper: number format problem");
                    e.printStackTrace();
            } catch (SQLException e) {
                    System.out.println("YolcuUcusMapper: sql problem");
                    e.printStackTrace();
            }
		}
		else
            System.out.println("no yolcuucus with given ID");
		
        PilotMapper pm = new PilotMapper();
        Pilot p = (Pilot) pm.get(int3);
        SeferMapper sm = new SeferMapper();
        Sefer s = (Sefer) sm.get(int4);
		YolcuUcakMapper yum = new YolcuUcakMapper();
		YolcuUcak yu = (YolcuUcak) yum.get(int5);

		yolcuucus.setYolcuUcak(yu);            		            		
		yolcuucus.setPilot(p);
		yolcuucus.setSefer(s);
		for (Koltuk i:yolcuucus.getKoltuklar()){

			if (i.getClass().getName().equals("DomainPackage.UcusBusinessKoltuk"))
				i.setFiyat(int6);
			else if(i.getClass().getName().equals("DomainPackage.UcusEkonomikKoltuk"))
				i.setFiyat(int7);
		}
		return yolcuucus;
	}

	@Override
	public int put(Object object) {
		YolcuUcus yolcuucus=(YolcuUcus) object;
			String dt = "";
			GregorianCalendar dta = yolcuucus.getUcusTarihi();
			dt += String.valueOf(dta.get(GregorianCalendar.YEAR)) + "-";
			dt += String.valueOf(dta.get(GregorianCalendar.MONTH)) + '-';
			dt += String.valueOf(dta.get(GregorianCalendar.DAY_OF_MONTH));
			if(!DataConnector.getInstance().update("INSERT INTO yolcuucus "+
					"(ucusid, ucustarihi, pilot, sefer, yolcuucak, businesskoltukfiyati, ekonomikkoltukfiyati) " +
					"values ('"+yolcuucus.getUcusID()+"', '"+
					dt+"', '"+
					yolcuucus.getPilot().getPilotID()+"', '"+
					yolcuucus.getSefer().getSeferID()+"', '"+
					yolcuucus.getYolcuUcak().getUcakID()+"', '"+
					yolcuucus.getYolcuUcakBusinessKoltukFiyat()+"', '"+
					yolcuucus.getYolcuUcakEkonomikKoltukFiyat()+
					"')")){
				System.out.println("error");
			}
		return 0;
	}

	@Override
	public List<Object> getAll() {
		List<Object> allYolcuUcusList = new ArrayList<Object>();
    	ResultSet rs = DataConnector.getInstance().query("select * from yolcuucus;");
    	int numberOfRows=0;
		try {
			ResultSetMetaData rsMetaData = rs.getMetaData();
            numberOfRows = rsMetaData.getColumnCount()+1;
		} catch (SQLException e1) {
			e1.printStackTrace();
		}
	List<Float> float6 = new ArrayList<Float>();
	List<Float> float7 = new ArrayList<Float>();
    try {
    	
    	if (rs != null){
            while(rs.next()){
                    
                    YolcuUcus yolcuucus= new YolcuUcus();
                    	YolcuUcak u = new YolcuUcak();
                    	u.setUcakID(Integer.parseInt(rs.getString(5)));
                    	
                    	Pilot p = new Pilot(Integer.parseInt(rs.getString(3)));
                    	Sefer s = new Sefer();
                    	s.setSeferID(Integer.parseInt(rs.getString(4)));                    	
                    	yolcuucus.setUcusID(Integer.parseInt(rs.getString(1)));
                    	yolcuucus.setUcusTarihi(new GregorianCalendar(Integer.parseInt(rs.getString(2).split("-")[0]), 
    							Integer.parseInt(rs.getString(2).split("-")[1]), 
    							Integer.parseInt(rs.getString(2).split("-")[2])));
                    	yolcuucus.setPilot(p);
                    	yolcuucus.setSefer(s);
                    	yolcuucus.setYolcuUcak(u);
                    	float6.add(Float.parseFloat(rs.getString(6)));
                    	float7.add(Float.parseFloat(rs.getString(7)));
                    	
                    	
                            allYolcuUcusList.add(yolcuucus);
            
            }
    	}
    }
    catch(Exception e){
    	e.printStackTrace();
    }
    int a = 0;
    	for (Object se: allYolcuUcusList){
    		YolcuUcus yu = (YolcuUcus) se;
    		YolcuUcakMapper yum = new YolcuUcakMapper();
    		PilotMapper pm = new PilotMapper();
    		SeferMapper sm = new SeferMapper();
    		YolcuUcak y = (YolcuUcak) yum.get(yu.getYolcuUcak().getUcakID());

    		Pilot p = (Pilot) pm.get(yu.getPilot().getPilotID());
    		Sefer s = (Sefer) sm.get(yu.getSefer().getSeferID());
    		
    		
    		yu.setPilot(p);
    		yu.setSefer(s);
    		yu.setYolcuUcak(y);
    		
    		for (Koltuk j:yu.getKoltuklar()){
        		
    			if (j.getClass().getName().equals("DomainPackage.UcusBusinessKoltuk"))
    				j.setFiyat(float6.get(a));
    			else if(j.getClass().getName().equals("DomainPackage.UcusEkonomikKoltuk"))
    				j.setFiyat(float7.get(a));
    			
    		}
    	a++;
    	}
    	
    	return allYolcuUcusList;	
		
	}

}
